Graylog 作為一個能夠收容多種記錄資料的收集器,內建許多種類型的記錄輸入器 (Input) 提供我們選擇,依據要接收的記錄類型建立出多種對應的輸入器,以便將記錄放置到正確的處理程序。
在 Graylog 當中輸入器分為兩種:
監聽輸入器 (Listener Input)
這類型的輸入器會在 Graylog 建立一個監聽連接埠,等待來源裝置將記錄傳送過來。協定可以選用 TCP/UDP,TCP 可以確保資料正確傳送接收,UDP 則可以提供高速的傳輸效率但沒有確保一定能正確接收。
拉取輸入器 (Pull Input)
此類型的輸入是由 Graylog 主動連到遠端裝置,以 API 或其它方方式將資料擷取回來。在大部份的情況下,拉取資料需要以身份認證連接至遠端裝置,甚至可能需要採用 HTTPS 加密連現與可信任的憑證。
以下列出 Graylog Open 當中最常使用的幾種輸入器:
Syslog 是最常見的一種記錄格式,Graylog 可以接收 RFC 5424
與 RFC 3164
,在大多數的 Linux、BSD 作業系統內建的 rsyslog 或 syslog-ng 都可以正確支援。而常見的網路裝置也都支援 Syslog 格式,例如防火牆、交換器、路由器等等。
以下是一段符合 RFC 5424 標準的 Syslog 記錄內容:
<27>1 2024-09-17T20:44:12.925182+08:00 router-003.jason.tools dhcp6c 8071 - - transmit failed: Permission denied
要建立 Syslog 輸入器,請由功能表選擇 System
(1) -> Inputs
(2),接著在左邊的下拉清單中選擇 Syslog UDP
(3),最後按下 Lanuch new input
(4)。
選擇 Syslog UDP
進到 Syslog UDP 輸入器設定畫面,以下有幾個需要設定的欄位:
Global:
建議勾選,日後若建立為叢集模式後可以省下一些步驟。
Title:
設定這個輸入器名稱,我個人的命名習慣為 syslog_udp_30414。以底線分隔,第一欄是格式,第二欄協定,第三欄連接埠號,以後在檢視的時候就會清楚易懂。
Bind address:
要在那一個 IP 上監聽,預設 0.0.0.0 表示監聽 Graylog 伺服器所有的 IP。
Port:
要在那一個 Port 上監聽,請使用 1024 以上的數字,我個人習慣採用 30514。
設定 Syslog UDP
下方還有一些欄位,保持預設值即可,最後按下 Lanuch Input
後即是建立完成,回到輸入器清單後會多出一筆 syslog_udp_30514 的輸入資訊區塊。
建立 Syslog UDP 完成
如果 Syslog UDP 輸入器正常監聽,會在名稱的後方顯示綠色區塊 1 RUNNING
的字樣表示正常,若顯示為橘色區塊 0 RUNNING
表示沒有正確啟動,通常原因是該連接埠已經被其它程式佔用,需要更換連接埠或將原本佔用的程式結束。
在右邊有一個 Network IO
的欄位,後方的數字會顯示最近每秒所收到的記錄容量,若確認有對這個輸入器傳送記錄但是數字沒有變化,需要檢查中間的網路連線狀況、網路設定,或者防火牆阻擋。
在數字後方的 total
則是顯示統計容量,它會記錄從這個輸入器啟動以來所收到的所有記錄容量進行統計,若輸入器有重新啟動過數字會歸零重新統計。
注意:
某些網路裝置宣稱可以傳送 syslog 的記錄,但實際上它並未符合上述兩種 RFC 標準,若傳送至 Syslog 輸入器將會因格式不符而被丟棄。這類型的裝置要改為傳送至稍後會介紹的 Raw/Plaintext 輸入器。
CEF (Common Event Format) 是經過擴充的記錄格式,它定義了語法、標頭以及最重要的 key-value 鍵值組合的格式,這種 key-value 格式可以讓 Log 伺服器正確的拆解出不同的欄位,省去 Syslog 格式在接收後還需要自行拆解欄位的工作。
在許多網路裝置 (尤其是防火牆) 都有支援 CEF 格式的傳送,例如 Palo Alto Networks 防火牆、Fortinet 防火牆、Check Point 防火牆...等等。因此,若您的網路裝置有支援 CEF 格式,請選擇 CEF 傳送會優於 Syslog。
以下是一段符合 CEF 格式的記錄內容:
Feb 29 15:47:25 10.0.1.43 CEF: 0|PATownsend|IBM-QAUDJRN|1.28|1007|CO-Create object|4|msg=CO-Create object act=N-Create of new object actual_type=CO-N jrn_seq=102361 timestamp=20120229154725823000 dproc=ICC suser=MVAGANEK job_number=638012 eff_user=MVAGANEK object=X_BIGNUM object_library=ICAPITST object_type=*MODULE object_attrCLE
要建立 CEF 輸入器,請在輸入器管理頁左邊的下拉清單中選擇 CEF UDP
(1),最後按下 Lanuch new input
(2)。
選擇 CEF UDP
進到 CEF UDP 輸入器設定畫面,以下有幾個需要設定的欄位:
Global:
建議勾選,日後若建立為叢集模式後可以省下一些步驟。
Title:
設定這個輸入器名稱,我個人的命名習慣為 cef_udp_35556。以底線分隔,第一欄是格式,第二欄協定,第三欄連接埠號,以後在檢視的時候就會清楚易懂。
Bind address:
要在那一個 IP 上監聽,預設 0.0.0.0 表示監聽 Graylog 伺服器所有的 IP。
Port:
要在那一個 Port 上監聽,請使用 1024 以上的數字,我個人習慣採用 35556。
設定 CEF UDP
下方還有一些欄位,保持預設值即可,最後按下 Lanuch Input
後即是建立完成,回到輸入器清單後會多出一筆 cef_udp_35556 的輸入資訊區塊。
建立 CEF UDP 完成
如果 CEF UDP 輸入器正常監聽,會在名稱的後方顯示綠色區塊 1 RUNNING
的字樣表示正常,若顯示為橘色區塊 0 RUNNING
表示沒有正確啟動,通常原因是該連接埠已經被其它程式佔用,需要更換連接埠或將原本佔用的程式結束。
在右邊有一個 Network IO
的欄位,後方的數字會顯示最近每秒所收到的記錄容量,若確認有對這個輸入器傳送記錄但是數字沒有變化,需要檢查中間的網路連線狀況、網路設定,或者防火牆阻擋。
在數字後方的 total
則是顯示統計容量,它會記錄從這個輸入器啟動以來所收到的所有記錄容量進行統計,若輸入器有重新啟動過數字會歸零重新統計。
如果有裝置可以設定往遠端伺服器傳送記錄,但其記錄並非標準的 Syslog 或 CEF 時,請改用 Raw/Plaintext 輸入器,它將不會考慮從接收到的記錄中嘗試拆解出日期或其它欄位,而是將原始資料直接儲存起來。
除了來源格式的考量之外,有時出於測試是否裝置有傳送記錄出來的場景,也可以設定該裝置先傳送至 Raw/Plaintext 輸入器,確認能夠正確接收後再變更設定往預期的輸入器傳送。
至於 Log 記錄的時間則會以 Graylog 伺服器接收到的時間做為該筆記錄的時間戳記 (timestamp) 欄位儲存。
要建立 Raw/Plaintext 輸入器,請在輸入器管理頁左邊的下拉清單中選擇 Raw/Plaintext UDP
(1),最後按下 Lanuch new input
(2)。
選擇 Raw/Plaintext UDP
進到 Raw/Plaintext UDP 輸入器設定畫面,以下有幾個需要設定的欄位:
Global:
建議勾選,日後若建立為叢集模式後可以省下一些步驟。
Title:
設定這個輸入器名稱,我個人的命名習慣為 raw_udp_35555。以底線分隔,第一欄是格式,第二欄協定,第三欄連接埠號,以後在檢視的時候就會清楚易懂。
Bind address:
要在那一個 IP 上監聽,預設 0.0.0.0 表示監聽 Graylog 伺服器所有的 IP。
Port:
要在那一個 Port 上監聽,請使用 1024 以上的數字,我個人習慣採用 35555。
設定 Raw/Plaintext UDP
下方還有一些欄位,保持預設值即可,最後按下 Lanuch Input
後即是建立完成,回到輸入器清單後會多出一筆 raw_udp_35555 的輸入資訊區塊。
建立 Raw/Plaintext UDP 完成
如果 Raw/Plaintext UDP 輸入器正常監聽,會在名稱的後方顯示綠色區塊 1 RUNNING
的字樣表示正常,若顯示為橘色區塊 0 RUNNING
表示沒有正確啟動,通常原因是該連接埠已經被其它程式佔用,需要更換連接埠或將原本佔用的程式結束。
在右邊有一個 Network IO
的欄位,後方的數字會顯示最近每秒所收到的記錄容量,若確認有對這個輸入器傳送記錄但是數字沒有變化,需要檢查中間的網路連線狀況、網路設定,或者防火牆阻擋。
在數字後方的 total
則是顯示統計容量,它會記錄從這個輸入器啟動以來所收到的所有記錄容量進行統計,若輸入器有重新啟動過數字會歸零重新統計。
GELF (Graylog Extended Log Format) 是由 Graylog 所定義的一種開放格式,其目的是為了解決過去 Log 記錄格式的幾種缺點:
因此,GELF 即是為了解決上述的問題而生,它不僅支援了切分區塊傳送以滿足大型記錄傳送的機制,而且採用的 JSON (JavaScript Object Notation) 格式也可以在附加值的時候分辨是字串或數字。
除了可以明文傳輸之外,為了節省資料傳輸量 GELF 也可以選擇 GZIP 或 ZLIB 兩種壓縮演算法。壓縮演算法由裝置端傳送時決定,Graylog 伺服器會自動判別無需選擇,若裝置端未宣告壓縮演算法,預設是採用 GZIP。
以下是一段符合 RFC 7159 標準 JSON 格式的 GELF 記錄內容:
{
"version": "1.1",
"host": "example.org",
"short_message": "A short message that helps you identify what is going on",
"full_message": "Backtrace here\n\nmore stuff",
"timestamp": 1385053862.3072,
"level": 1,
"_user_id": 9001,
"_some_info": "foo",
"_some_env_var": "bar"
}
要建立 GELF 輸入器,請在輸入器管理頁左邊的下拉清單中選擇 GELF UDP
(1),最後按下 Lanuch new input
(2)。
選擇 GELF UDP
進到 GELF UDP 輸入器設定畫面,以下有幾個需要設定的欄位:
Global:
建議勾選,日後若建立為叢集模式後可以省下一些步驟。
Title:
設定這個輸入器名稱,我個人的命名習慣為 gelf_udp_32201。以底線分隔,第一欄是格式,第二欄協定,第三欄連接埠號,以後在檢視的時候就會清楚易懂。
Bind address:
要在那一個 IP 上監聽,預設 0.0.0.0 表示監聽 Graylog 伺服器所有的 IP。
Port:
要在那一個 Port 上監聽,請使用 1024 以上的數字,我個人習慣採用 32201。
設定 GELF UDP
下方還有一些欄位,保持預設值即可,最後按下 Lanuch Input
後即是建立完成,回到輸入器清單後會多出一筆 gelf_udp_32201 的輸入資訊區塊。
建立 GELF UDP 完成
如果 GELF UDP 輸入器正常監聽,會在名稱的後方顯示綠色區塊 1 RUNNING
的字樣表示正常,若顯示為橘色區塊 0 RUNNING
表示沒有正確啟動,通常原因是該連接埠已經被其它程式佔用,需要更換連接埠或將原本佔用的程式結束。
在右邊有一個 Network IO
的欄位,後方的數字會顯示最近每秒所收到的記錄容量,若確認有對這個輸入器傳送記錄但是數字沒有變化,需要檢查中間的網路連線狀況、網路設定,或者防火牆阻擋。
在數字後方的 total
則是顯示統計容量,它會記錄從這個輸入器啟動以來所收到的所有記錄容量進行統計,若輸入器有重新啟動過數字會歸零重新統計。
Raw or Plaintext Input
https://go2docs.graylog.org/current/getting_in_log_data/raw_or_plaintext_input.html?tocpath=Getting%20in%20Logs%7CGraylog%20Inputs%7C_____18